<?php
namespace app\common\controller;
use app\common\model\Level as LevelModel;
use think\Controller;

/**
 * 前台公用基础控制器
 * Class IndexBase
 * @package app\common\controller
 */
class IndexBaseController extends Controller {
	
	protected function _initialize() {
		header('Access-Control-Allow-Origin:*');
		parent::_initialize();
		// 配置
		if (cache('site_config')) {
			$site_config = cache('site_config');
		} else {
			$site_config = get_config('site_config');
		}
		$this->check_ac();
		config($site_config);
		//验证key,是否非法访问
		if(input("key") != config("api_key")){
			return $this -> toError(400,'key验证失败');
		}
	}
	/**
	 * 判断请求控制器和action验证用户token
	 */
	public function check_ac(){
		$request = \think\Request::instance();
		$controller=$request->controller();
		$action=$request->action();
		$array_action=array("login","regist","call_back","loginfast","return_pwd");
		
	}
	
	
	
	/**
	 * 通用code代码
	 * 200 请求成功
	 * 400 请求非法、密钥错误
	 * 401 请求方式错误
	 * 402 参数为空、格式错误
	 * 403 服务器内部错误
	 * 404 找不到API方法
	 * 405 返回数据为空
	 * 406 数据库错误
	 * 407 PHP错误
	 * 408 业务逻辑错误
	 * 409 自定义错误
	 */
	protected function toJson($code='', $msg='', $data='') {
		return json(['code'=>$code,'msg'=>$msg,'data'=>$data]);
	}
	/**
	 * 调用成功
	 */
	protected function toSuccess($msg='', $data='') {
		return json(['code'=>200,'msg'=>$msg,'data'=>$data]);
	}
	/**
	 * 调用失败
	 */
	protected function toError($code='', $msg='', $data='') {
		return json(['code'=>$code,'msg'=>$msg,'data'=>$data]);
	}
	/**
	 * 二维码生成
	 * $url
	 * $size
	 * $fontsize
	 */
	protected function qrcode($url, $size = 150, $fontsize = 16) {
        //生成当前的二维码
        $qrCode = new \Endroid\QrCode\QrCode();
        if($url) {
            //想显示在二维码中的文字内容，这里设置了一个查看文章的地址
            $qrCode->setText($url)
                ->setSize($size)
                ->setPadding(10)
                ->setErrorCorrection('high')
                ->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0))
                ->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0))
                ->setLabelFontSize($fontsize)
                ->setImageType(\Endroid\QrCode\QrCode::IMAGE_TYPE_PNG);
            $qrCode->render();
        }
    }
	
	/**
	 * 发送短信
	 * $mobile 手机号
	 * $template_no 模板编号(数据库主键)，注意不是模板ID
	 */
	protected function get_code($mobile, $template_no){
		// 获取短信模板
		$template = db('sms_template') -> find($template_no);
		// 如果是验证码类型，则生成6位验证码
		if($template['type'] == 1){
			$code = rand(100000, 999999);
			$template['params'] = str_replace('${code}', $code, $template['params']);
			$data['code'] = $code;
		}
		$msg = send_sms($mobile, $template['tid'], htmlspecialchars_decode($template['params']), $template['sign_name']);
		$data['mobile'] = $mobile;
		$data['title'] = $template['title'];
		$data['add_time'] = now_time();
		if(isset($msg->result)) {
			$data['message'] = '发送成功';
			db('sms_code')->insert($data);
			return $this->toSuccess('发送成功');
		}else{
			$data['result'] = 0;
			$data['message'] = '发送失败:'.$msg->sub_msg;
			db('sms_code')->insert($data);
			if($msg->sub_code == "isv.BUSINESS_LIMIT_CONTROL"){
				$err = "超过发送次数，请稍后再试";
			}else{
				$err = "发送失败";
			}
			return $this->toError(408, $err);
		}
	}
	/**
	 * 注册三级关系确立
	 */
	function mc_level($from_id,$uid,$level=1){
	    if($level <= 3){
	        $data = array();
	        $data['uid'] = $from_id;
	        $data['son_id'] = $uid;
	        $data['level'] = $level;
	        $model=new LevelModel();
			$model->save($data);
			$member=model("member");
	        $mobile =$member->where("id",$uid)->value("mobile"); 
/*	        if($level == 1){
	            $notice = '成功邀请：'.$mobile.'注册。';
	            mc_notice($notice,3,$from_id);
	        }else{
	            $notice = '新增下级会员：'.$mobile;
	            mc_notice($notice,3,$from_id);
	        }*/
	        
	      $from_id = $member->where("id",$from_id)->value("pid"); 
	       if($from_id!=0){
	           $this->mc_level($from_id,$uid,$level+1);
	       }
	    }
	}
	/**
	 * 保存
	 * $param $obj 数据表对象名
	 * @data 数据
	 */
	function insertData($obj,$data){
		$model=model($obj);
		$res=$model->save($data);
		return $res;
	}
	/**
	 * 更新
	 * $param $obj 数据表对象名
	 * @data 数据
	 */
	function updateData($obj,$data,$id){
		$model=model($obj);
		$res=$model->save($data,$id);
		return $res;
	}
}
